home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / Sample Code / Snippets / Sound / RecordToFile / RecordToFile.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-07-15  |  2.7 KB  |  127 lines  |  [TEXT/MPS ]

  1. #include    <Quickdraw.h>
  2. #include    <Windows.h>
  3. #include    <dialogs.h>
  4. #include    <Files.h>
  5. #include    <Packages.h>
  6. #include    <OSEvents.h>
  7. #include    <Memory.h>
  8. #include    <Sound.h>
  9. #include    <SoundInput.h>
  10. #include    <OSUtils.h>
  11.  
  12. #define    TRUE            0xFF
  13. #define    FALSE            0
  14.  
  15. typedef struct {
  16.     short        OnOff;
  17.     short         Level;
  18. } Level;
  19.  
  20. pascal void MyRecComp (SPBPtr inParamPtr);
  21.  
  22. main()
  23. {
  24.     Point                where = {20,20};
  25.     SFReply                reply;
  26.     short                SomeRefNum;
  27.     char*                string;
  28.     Level                myLevel;
  29.     OSErr                err;
  30.     SPBPtr                RecordRec;
  31.     long                SoundRefNum;
  32.     long                totalMilRecord;
  33.     ParmBlkPtr            paramBlock;
  34.         
  35.     
  36.     InitGraf(&qd.thePort);
  37.     FlushEvents(everyEvent, 0);
  38.     InitWindows();
  39.     InitDialogs(nil);
  40.     InitCursor();
  41.     
  42.     string = (char*) "\pPick an SND File";
  43.  
  44.     SFGetFile (where, (Str255) string, nil, -1, (SFTypeList) nil, nil, &reply);
  45.     err = FSOpen(reply.fName, reply.vRefNum, &SomeRefNum);
  46.     if (err != noErr)
  47.         Debugger();
  48.         
  49.     err = SetupAIFFHeader (SomeRefNum, 1, 0x56EE8BA3, 8, 'NONE', 0, 0);
  50.     if (err != noErr)
  51.         Debugger();
  52.     
  53.     err = SPBOpenDevice ('', siWritePermission, &SoundRefNum);
  54.     if (err != noErr)
  55.         Debugger();
  56.         
  57.     myLevel.OnOff = 1;
  58.     myLevel.Level = 0;
  59.     err = SPBSetDeviceInfo (SoundRefNum,siTwosComplementOnOff, (Ptr) &myLevel);
  60.     if (err != noErr)
  61.         Debugger();
  62.         
  63.     RecordRec = (SPBPtr) NewPtr(sizeof (SPB));
  64.     if (MemError() != noErr || RecordRec == nil)
  65.         Debugger();
  66.  
  67.     RecordRec->inRefNum = SoundRefNum;
  68.     RecordRec->count = 0;
  69.     RecordRec->milliseconds = 15000;
  70.     RecordRec->bufferLength = 0;
  71.     RecordRec->bufferPtr = nil;
  72.     RecordRec->completionRoutine = (ProcPtr) MyRecComp;
  73.     RecordRec->interruptRoutine = nil;
  74.     RecordRec->userLong = 0;
  75.     RecordRec->error = 0;
  76.     RecordRec->unused1 = 0;
  77.  
  78.     err = SPBRecordToFile (SomeRefNum, RecordRec, TRUE);
  79.     if (err != noErr)
  80.         Debugger();
  81.         
  82.     do {
  83.         } while (RecordRec->userLong == 0);
  84.         
  85.     totalMilRecord = 15000;
  86.     
  87.     err = SPBMillisecondsToBytes(SoundRefNum, &totalMilRecord);
  88.     if (err != noErr)
  89.         Debugger();
  90.  
  91.     paramBlock = (ParmBlkPtr) NewPtr(sizeof (IOParam));
  92.     if (MemError() != noErr || paramBlock == nil)
  93.         Debugger();
  94.  
  95.     paramBlock->ioParam.ioRefNum = SomeRefNum;
  96.     paramBlock->ioParam.ioPosMode = 1;
  97.     paramBlock->ioParam.ioPosOffset = 0;
  98.         
  99.     err = PBSetFPos(paramBlock, FALSE);
  100.     if (err != noErr)
  101.         Debugger();
  102.  
  103.     err = SetupAIFFHeader (SomeRefNum, 1, 0x56EE8BA3, 8, 'NONE', totalMilRecord, 0);
  104.     if (err != noErr)
  105.         Debugger();
  106.     
  107.     SPBCloseDevice (SoundRefNum);
  108.         
  109.     DisposePtr ((Ptr) RecordRec);
  110.     
  111.     err = SndStartFilePlay (nil, SomeRefNum, 0, 74000, nil, nil, nil, FALSE);
  112.     if (err != noErr)
  113.         Debugger();
  114.             
  115.     FSClose (SomeRefNum);
  116. }
  117. /**********************************/
  118.  
  119. pascal void MyRecComp (SPBPtr inParamPtr)
  120. {
  121.     inParamPtr->userLong = 1;
  122.     
  123.     return;
  124. }
  125.  
  126. /**********************************/
  127.